// const app = getApp()
// location_check_in/location_check_in.js
const util = require('../../utils/util')
const app = getApp()
const urlList = require("../../utils/api.js") // 根据实际项目自己配置

// 实例化API核心类
const qqmapsdk = app.globalData.qqmapsdk

Page({

    /**
     * 页面的初始数据
     */
    data: {
        
        poi: {
            latitude: '',
            longitude: ''
        },
        markers: [
           {
            latitude: 21.151991,
            longitude: 110.302118,
            title: '科技楼516',
            label: '打卡点',
            width: 20,
            height: 30,
           
           }
        ],
        //范围半径
        circles: [{
            latitude: 21.151991,
            longitude: 110.302118,
            radius: app.globalData.punchDistance,
            fillColor:'#b3d9ff',
            color:'#b3d9ff'
        }],
        addressName: '',
        time: '',
        timer: '',
        timer2: '', // 用来每个一段时间自动刷新一次定位
        canClick: true,
        distance: 0,
        punchText: 'aaa',

        punchStatus: true //判断是签退还是待签到状态，true：此时为未签到状态~~
    },
    //获取当前打卡状态
    getPunchStatus() {
        var that = this
        wx.request({
            url: app.globalData.requestContext + '/queryStatus',
            method: 'GET',
            header: {
                'content-type': "application/json", // 默认值
                'token': wx.getStorageSync("token")
            },
            success: function (result) {
                var res = result.data
                //有未签退记录
                if (res.code == 1) {
                    that.setData({
                        punchStatus: false
                    })

                } else if (res.code == 0) {
                    that.setData({
                        punchStatus: true
                    })

                } 
                else if (res.code == 3) {
                    wx.showToast({
                        title: res.msg,
                        icon: 'error'
                    })
                    wx.reLaunch({
                      url: '/pages/login/login',
                    })
                    

                }

            }

        })
    },
    //获取用户头像昵称信息
    getUserInfo: function () {
        wx.showModal({
            title: "提示",
            content: "检查到您是首次使用小程序，我们希望获得您的个人信息，以便为您提供更好的服务",
            showCancel: false, // 是否显示取消按钮
            success(res) {
                // 用户点击了确定
                if (res.confirm) {
                    wx.getUserProfile({
                        desc: "用于完善用户资料", // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
                        success: res => {
                            // 用户同意授权
                            console.log(res)
                            wx.setStorageSync('nickName', res.userInfo)
                            wx.setStorageSync('avatarUrl', res.userInfo.avatarUrl)
                        },
                        fail: e => {
                            // 用户拒绝授权
                        },
                        complete: e => {
                            // 接口调用结束（调用成功、失败都会执行）
                            // ...授权逻辑
                        }
                    });
                } else {

                }
            }
        });
    },

    //获取地址
    getAddress(e) {
        var that = this;
        qqmapsdk.reverseGeocoder({
            //位置坐标，默认获取当前位置，非必须参数
            /**
             * 
              location: {
                latitude: 39.984060,
                longitude: 116.307520
              },
            */
            //
            // 成功后的回调
            success: function (res) {
                // console.log(res);
                that.setData({
                    addressName: res.result.address
                })
                var res = res.result;
                var mks = [];
                //当get_poi为0时或者为不填默认值时，检索目标位置，按需使用
                mks.push({ // 获取返回结果，放到mks数组中
                    title: res.address,
                    id: 0,
                    latitude: res.location.lat,
                    longitude: res.location.lng,
                    iconPath: '../../images/zcxj/myPosition.png', // 图标路径
                    width: 21,
                    height: 28,
                    // callout: { //在markers上展示地址名称，根据需求是否需要
                    //   content: res.address,
                    //   color: '#000',
                    //   display: 'ALWAYS'
                    // }
                });
                that.setData({ // 设置markers属性和地图位置poi，将结果在地图展示
                    // markers: mks,
                    poi: {
                        latitude: res.location.lat,
                        longitude: res.location.lng
                    }
                });
            },
            fail: function (error) {
                console.error(error);
            },
            complete: function (res) {
                console.log(res);
            }
        })
    },
    //获取当前时间
    getTime: function () {
        let that = this
        let time = that.data.time
        that.setData({
            timer: setInterval(function () {
                time = util.formatTime(new Date())
                that.setData({
                    time: time.substr(-8)
                });
                if (time == 0) {
                    // 页面跳转后，要把定时器清空掉，免得浪费性能
                    clearInterval(that.data.timer)
                }
            }, 1000)
        })
    },
    //重新定位
    rePosition: function () {
        this.getLocationStatus()
        this.getDistance()
        console.log('用户点了重新定位')
        this.getAddress()
    },
    //签到功能
    checkIn: function () {
        // this.subcribeNotice()

        // this.setData({
        //   canClick: false
        // })
        this.getDistance()
        console.log("两点距离为：" + this.data.distance)
        console.log('用户点击了签到')
        var that = this
        var nowTime = util.formatTime(new Date())
        var location = this.data.addressName
        //判断当前位置是否在打卡范围
        
        if (that.data.distance > app.globalData.punchDistance || that.data.distance == 0) {
            wx.showToast({
                title: '不在打卡范围内\n距离打卡位置：' + that.distance + '米',
                icon: 'error',
                duration: 2000
            })
            return
        }
       
        wx.showModal({
            title: '请确认打卡信息',
            // content: '请确认待整改项已整改完毕！',
            content: `地点：${this.data.addressName}\n时间：${nowTime}`, // 开发者工具上没有换行，真机调试时会有的
            confirmText: '确认',
            success(res) {
                var punchUrl = app.globalData.requestContext + '/punch';
                console.log(that.data.punchStatus)
                if (!that.data.punchStatus) {
                    punchUrl = app.globalData.requestContext + '/signOut';
                }


                if (res.confirm) {
                    console.log('用户点击确定')


                    wx.request({
                        url: punchUrl,
                        method: "post",
                        data: {

                            address: that.data.addressName,
                        },

                        header: {
                            'content-type': "application/x-www-form-urlencoded", // 默认值
                            // 'cookie': wx.getStorageSync("sessionid"), //读取sessionid,当作cookie传入后台将PHPSESSID做session_id使用
                            'token': wx.getStorageSync("token")
                        },
                        success: function (result) {

                            console.log
                            if (result.data.code == 0) {
                                wx.showToast({
                                    title: result.data.msg,
                                })
                               
                                // var jsonObject = JSON.stringify(result.data.data)
                                // console.log(jsonObject)

                                if (result.data.data.result == "签到") {
                                    that.subcribeNotice()
                                    that.setData({
                                        punchStatus: false
                                    })
                                } else if (result.data.data.result == "签退") {
                                    that.setData({
                                        punchStatus: true
                                    })
                                }


                                //   wx.switchTab({
                                //    url: '/pages/location_check_in/location_check_in',
                                //  })
                            }
                             else if (result.data.code == 3) {
                                wx.reLaunch({
                                    url: '/pages/login/login',
                                })
                            }
                             else {
                                wx.showToast({
                                    title: result.data.msg,
                                    icon: 'error'
                                })
                            }

                        }
                    })


                } else if (res.cancel) {
                    console.log('用户点击取消')
                    that.setData({
                        canClick: true
                    })
                }
            }
        })
    },
    subcribeNotice:function(){
        wx.requestSubscribeMessage({
            tmplIds: ['CsgP5sk-XUlqBZm5ias6DpJaUSuafInbeRXAFA83gjk'],
            success (res) {console.log("res:" + res) }
          })
    },
    //获取当前位置到考核点的距离
    getDistance: function () {

        var _this = this;
        //调用距离计算接口
        qqmapsdk.calculateDistance({
            mode: 'straight', //可选值：'straight'直线距离，'driving'（驾车）、'walking'（步行），不填默认：'walking',可不填
            //from参数不填默认当前地址
            //获取表单提交的经纬度并设置from和to参数（示例为string格式）
            from: {
                latitude: _this.data.poi.latitude,
                longitude: _this.data.poi.longitude
            }, //若起点有数据则采用起点坐标，若为空默认当前地址
            to: [{
                latitude: 21.151991,
                longitude: 110.302118
            }], //终点坐标
            success: function (res) { //成功后的回调
                console.log(res);
                var res = res.result;
                var dis = [];
                for (var i = 0; i < res.elements.length; i++) {
                    dis.push(res.elements[i].distance); //将返回数据存入dis数组，
                }
                _this.data.distance = dis
                //   _this.setData({ //设置并更新distance数据
                //     distance: dis
                //   });
            },
            fail: function (error) {
                console.error(error);
            },
            complete: function (res) {
                console.log(res);
            }
        });

    },
    realyCheckIn: function () {
        var that = this
        var patrolForm = app.globalData.patrolForm // 其他需要一并提交过去的业务数据

        console.log(app.globalData)
        // debugger
        // 要在这里给 patrolForm 补充其他的参数
        patrolForm.checkaddress = this.data.addressName
        patrolForm.searchtime = util.formatTime(new Date())
        // 应该先判断用户有没有登录，没登录就授权登录
        patrolForm.searchuser = app.globalData.user ? app.globalData.user.UserName : app.globalData.userInfo.nickName
        console.log("传给后台的 searchuser：", patrolForm.searchuser)
        // 拼接："经度,纬度"
        patrolForm.latandlon = this.data.poi.longitude + "," + this.data.poi.latitude


        console.log(patrolForm)
        console.log("↑ 签到提交的post参数")

        var tmpNumber = 0
        wx.request({
            url: urlList.submitCheckInInfo,
            data: patrolForm,
            method: "POST",
            header: {
                'content-type': 'application/x-www-form-urlencoded'
            },
            success: function (res) {
                console.log(res)
                if (res.data.IsSuccess) {
                    console.log(res.data.IsSuccess, typeof (res.data.IsSuccess))
                    console.log("请求成功")
                    var patrolId = res.data.ReturnData[0].id
                    // // 看怎么取到返回的id
                    // debugger

                    if (patrolForm.img_arr1.length > 0) {
                        for (var i = 0; i < patrolForm.img_arr1.length; i++) {
                            tmpNumber = i
                            wx.uploadFile({
                                // 图片上传的接口地址
                                url: urlList.submitCheckInPhoto + "?patrolid=" + patrolId,
                                filePath: patrolForm.img_arr1[i],
                                name: 'content',
                                // formData: {
                                //   // 这里面可以携带一些参数一并传过去
                                //   patrolId: patrolId
                                // },
                                // header: {
                                //   Authorization: token
                                // },
                                success: function (res) {
                                    console.log(res)
                                },
                                fail: function (res) {
                                    that.setData({
                                        canClick: true
                                    })
                                },
                                complete: function () {
                                    // 因为上传图片是异步操作,所以会导致这里的 i 会取不到，故需要用个作用域更大点的变量来标识，否则 if 里面的代码不会执行
                                    if (tmpNumber === patrolForm.img_arr1.length - 1) {
                                        // 有图片就等图片上传完了再返回首页
                                        wx.showToast({
                                            title: '巡查签到成功！',
                                            icon: 'success',
                                            duration: 2000,
                                            complete: function () {
                                                wx.navigateBack({
                                                    delta: 2 // 回退两层页面
                                                })
                                            }
                                        })
                                    }
                                }
                            })
                        }
                    } else {
                        wx.showToast({
                            title: '巡查签到成功！',
                            icon: 'success',
                            duration: 2000,
                            complete: function () {
                                wx.navigateBack({
                                    delta: 2
                                })
                            }
                        })
                    }
                }
            },
            fail: function (res) {
                that.setData({
                    canClick: true
                })
            }
        })

    },
    getLocationStatus:function(){
        wx.getSetting({
            success: (res) => {
              let authSetting = res.authSetting
              if (authSetting['scope.userLocation']) {
                // 已授权
              } else {
                wx.showModal({
                  title: '您未开启地理位置授权',
                  content: '请开启位置定位',
                  success: res => {
                    if (res.confirm) {
                      wx.openSetting()
                    }
                  }
                })
              }
            }
          })      
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
       
        var that = this
        that.getTime()
        that.getAddress()
      
        // 查看是否授权

        // that.getUserInfo()
        that.setData({
            canClick: true, // 允许用户点击，防止多次提交
            timer2: setInterval(function () {
                that.getAddress()
            }, 20000) // 每20秒刷新一次定位
        })
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {
        clearInterval(this.data.timer)
        clearInterval(this.data.timer2)
        console.log("定时器已被清除")
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {
        
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {
        this.getPunchStatus()
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})